package specs.novousuario;

import br.com.ffm.info.praticas.fiptwitter.FipTwitter;
import br.com.ffm.info.praticas.fiptwitter.User;
import br.com.ffm.info.praticas.fiptwitter.excepcion.TwitterException;

import org.jbehave.core.annotations.Given;

import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;

import static org.junit.Assert.*;

public class InformacoesUsuario {
	private FIPTwitterFacade facade;
        private FipTwitter twitter;
	private User user;
	private Boolean exists;
        private Exception resultException;
        
	@Given("eu crio um usuário com login $login senha $senha e nome $nome")
	public void givenEuCrioUmUsuário(String login, String senha, String nome) throws TwitterException {
		facade = new FIPTwitterFacade();
		user = facade.NewUser(nome, login, senha);
	}
        
        @Given ("eu ja tenha cadastrado o usuario de login $login de nome $nome e senha $senha")
	public void givenDadoQueCrioUmUsuario(String login,String senha,String nome){
            try{
                facade = new FIPTwitterFacade();
                user = facade.NewUser(login,nome,senha);
	    } catch(Exception e){
                resultException = e;
	      }		
	}
       
        @When("busco pela biografia do usuário")
        public void whenBuscoPelaBiografiaUsuario(){
            try{
                facade.findByLogin(null);
		
	    } catch(Exception e){
                resultException = e;
	      }
        }
        
        @When("busco pelo email do usuário")
        public void whenBuscoPeloEmail(){
            try{
                facade.findByLogin(null);
            } catch(Exception e){
                resultException = e;
              }
        }
        
        @When("busco pelo website do usuário")
        public void whenBuscoPeloWebSite(){
            try{
                facade.findByLogin(null);
            } catch(Exception e){
                resultException = e;
              }
        }
        
        @When("busco pela localização do usuário")
        public void whenBuscoPelaLocalizacao(){
            try{
                facade.findByLogin(null);
            } catch(Exception e){
                resultException = e;
              }
        }
        
        @When("tento editar a biografia do usuário passando o login $login senha $senha e a nova biografia $novabiografia")
        public void whenEditarBiografia(String login,String senha,String novaBiografia){
                assertNotNull(user);
                assertEquals(exists,null);
        }
        
        @Then ("a biografia do usuario deve ser igual a: $novabiografia")
	public void thenovaBiografia(String login,String senha,String novabiografia){
                assertNotNull(user);
		assertEquals(novabiografia, user.getBiografia());	            
	}
        
        @When("tento editar o email do usuário passando o login $login senha $senha e o novo email $novoemail")
        public void whenEditarEmail(String novoEmail){
               assertNotNull(user);
               assertEquals(exists, null);
        }
        
        @When("tento editar o website do usuário passando o login $login senha $senha e o novo website $novosite")
        public void whenEditarWbsite(String login,String senha){
                assertNotNull(user);
                assertEquals(exists, null);
        }
        
        @When("tento editar a localização do usuário passando o login $login senha $senha e a nova localização $novalocalizacao")
        public void whenEditarLocalizacao(String login,String senha){
                assertNotNull(user);
                assertEquals(exists, null);
        }
        
        @Then("a biografia do usuario deve ser igual a: $Capitão do BOPE-RJ")
        public void thenBiografiaIgual(String biografia){
            assertNotNull(user);
            assertEquals(null,user.getBiografia());
        }
        
        @Then("o email do usuario deve ser igual a: $captnascimento@bope-rj.com.br")
        public void thenEmailUsuarioIgual(String email){
            assertNotNull(user);
            assertEquals(null,user.getEmail());
        }
        @Then("o website do usuario deve ser igual a: $www.eusoufoda.com.br")
        public void thenWebsiteUsuarioIgual(String website){
            assertNotNull(user);
            assertEquals(null,user.getWebsite());
        }
        
        @Then("a localização do usuario deve ser igual a: $Rio de Janeiro-Brasil")
        public void thenLocalizacaoUsuarioIgual(String localizacao){
            assertNotNull(user);
            assertEquals(null,user.getLocalizacao());
        }
        
        @Then("o nome do usuário deve ser igual a $nome")
	public void thenONomeDoUsuarioDeveSer(String nome){
		assertNotNull(user);
		assertEquals(nome, user.getNome());
	}

	@Then("o login do usuário deve ser igual a $login")
	public void thenOLoginDoUsuarioDeveSer(String login){
		assertNotNull(user);
		assertEquals(login, user.getLogin());
	}
	
	@When("eu verifico se o login $login já existe no sistema")
	public void whenEuVerificoSeOLoginJaExisteNoSistema(String login){
		exists = facade.hasLogin(login);
	}

	@Then("o retorno deve ser $bool")
	public void thenORetornoDeveSer(String bool){
		boolean expected = bool.equalsIgnoreCase("true") ? true : false;
		
		assertNotNull(exists);
		assertEquals(expected, exists.booleanValue());
			
		exists = null;
	}

}

        
     


     	




